package lyl.images;

import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.imageio.ImageIO;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
import java.awt.Image;

/**
 * 生成缩小jpg图片程序  
 */
public class ZoomPicture {
    public static void main(String arg[]) {

        String filePath = "d:/ddd.jpg"; // 图片的位置

        int height = 50;
        int width = 150;
        Icon icon = null;
        try {
            icon = getFixedBoundIcon(filePath, height, width);
        }
        catch (Exception e) {
            e.printStackTrace();
            System.out.println(" exception :  " + e);
        }
        System.out.println("  ###  " + icon); // 生成新图片的位置；
    }

    public static Icon getFixedBoundIcon(String filePath, int height, int width) throws Exception {
        double Ratio = 0.0;
        // 缩放比例
        File F = new File(filePath);
        if (!F.isFile())
            throw new Exception(F + "  is not image file error in getFixedBoundIcon! ");
        Icon ret = new ImageIcon(filePath);
        BufferedImage Bi = ImageIO.read(F);
        if ((Bi.getHeight() > height) || (Bi.getWidth() > width)) {
            if (Bi.getHeight() > Bi.getWidth()) {
                Ratio = (new Integer(height)).doubleValue() / Bi.getHeight();
            }
            else {
                Ratio = (new Integer(width)).doubleValue() / Bi.getWidth();
            }
            int lastLength = filePath.lastIndexOf(".");
            String subFilePath = filePath.substring(0, lastLength);
            String fileType = filePath.substring(lastLength);
            File zoomFile = new File(subFilePath + "_" + height + "_" + width + fileType);
            Image Itemp = Bi.getScaledInstance(width, height, Bi.SCALE_SMOOTH);
            AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio,
                    Ratio), null);
            Itemp = op.filter(Bi, null);
            try {
                ImageIO.write((BufferedImage) Itemp, "jpg", zoomFile);
                ret = new ImageIcon(zoomFile.getPath());
            }
            catch (Exception ex) {
                System.out.println(" ######## here error :  " + ex);
            }
        }
        return ret;
    }
}